package server.models.equipe;

import java.io.Serializable;
import java.rmi.AccessException;
import java.rmi.AlreadyBoundException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Observable;

import rmi.RemoteObservable;
import rmi.RemoteObserver;
import rmi.WrappedObserver;
import server.models.tireur.ITireur;

public class Equipe extends Observable implements Serializable, IEquipe {
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	//Membres privés
	private String nom;
	private ArrayList<ITireur> listeTireurs;
	private int score;
	
	//Constructeur
	public Equipe(String nom) throws AccessException, RemoteException, AlreadyBoundException, NotBoundException {
		this.nom = nom;
		this.listeTireurs = new ArrayList<ITireur>();
	}
	
	//Getters et setters
	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public ArrayList<ITireur> getTireurs() {
		return this.listeTireurs;
	}

	public void setTireurs(ArrayList<ITireur> tireurs) {
		this.listeTireurs = tireurs;
	}
	
	public void ajouterTireur(ITireur tireur)
	{
		System.out.println(this.countObservers());
		this.listeTireurs.add(tireur);
		this.setChanged();
		this.notifyObservers();
	}
	
	public void retirerJoueur(ITireur tireur)
	{
		this.listeTireurs.remove(tireur);
		this.setChanged();
		this.notifyObservers();
	}

	public void addToScore(int score) throws RemoteException {
		this.score += score;
		this.setChanged();
		this.notifyObservers();
		
	}
	
	public int getScore() throws RemoteException {
		return this.score;
	}
	
	@Override
    public void addObserver(RemoteObserver remoteObserver) throws RemoteException {
        this.addObserver(new WrappedObserver(remoteObserver));
    }
}
